package com.campus.food.service;

import com.campus.food.model.entity.Banner;
import com.campus.food.exception.BusinessException;

import java.util.List;

/**
 * 轮播图服务接口
 * 
 * @author Claude3.7 Sonnet
 * @since 2025-06-12
 */
public interface BannerService {
    
    /**
     * 添加轮播图
     * 
     * @param banner 轮播图信息
     * @return 添加后的轮播图
     * @throws BusinessException 业务异常
     */
    Banner addBanner(Banner banner) throws BusinessException;
    
    /**
     * 根据ID获取轮播图
     * 
     * @param id 轮播图ID
     * @return 轮播图信息
     * @throws BusinessException 业务异常
     */
    Banner getBannerById(Long id) throws BusinessException;
    
    /**
     * 更新轮播图
     * 
     * @param banner 轮播图信息
     * @return 更新是否成功
     * @throws BusinessException 业务异常
     */
    boolean updateBanner(Banner banner) throws BusinessException;
    
    /**
     * 删除轮播图
     * 
     * @param id 轮播图ID
     * @return 删除是否成功
     * @throws BusinessException 业务异常
     */
    boolean deleteBanner(Long id) throws BusinessException;
    
    /**
     * 获取所有轮播图列表
     * 
     * @return 轮播图列表
     */
    List<Banner> getAllBanners();
    
    /**
     * 获取启用状态的轮播图列表（按排序顺序升序）
     * 
     * @return 轮播图列表
     */
    List<Banner> getActiveBanners();
    
    /**
     * 更新轮播图状态
     * 
     * @param id 轮播图ID
     * @param status 状态（0-禁用，1-启用）
     * @return 更新是否成功
     * @throws BusinessException 业务异常
     */
    boolean updateBannerStatus(Long id, Integer status) throws BusinessException;
    
    /**
     * 获取轮播图列表（分页）
     * 
     * @param page 页码
     * @param size 每页数量
     * @param status 状态（可选）
     * @return 轮播图列表
     */
    List<Banner> getBannerList(int page, int size, Integer status);
    
    /**
     * 获取轮播图总数
     * 
     * @param status 状态（可选）
     * @return 轮播图总数
     */
    long getBannerCount(Integer status);
    
    /**
     * 批量删除轮播图
     * 
     * @param ids 轮播图ID列表
     * @return 删除是否成功
     * @throws BusinessException 业务异常
     */
    boolean deleteBannerBatch(List<Long> ids) throws BusinessException;
    
    /**
     * 更新轮播图排序
     * 
     * @param id 轮播图ID
     * @param sort 排序值
     * @return 更新是否成功
     * @throws BusinessException 业务异常
     */
    boolean updateBannerSort(Long id, Integer sort) throws BusinessException;
} 